package com.ylbh.modules.goods.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ylbh.common.pojo.goods.dto.GoodsDTO;
import com.ylbh.common.pojo.goods.dto.SubGoodsClassDTO;
import com.ylbh.common.pojo.goods.vo.GoodsClassVO;
import com.ylbh.common.pojo.goods.vo.GoodsServiceVO;
import com.ylbh.common.pojo.goods.vo.GoodsTypeVO;
import com.ylbh.common.pojo.goods.vo.SpecIficationVO;
import com.ylbh.common.pojo.goodsclass.vo.ShoppingGoodsClassSpecVO;
import com.ylbh.common.pojo.icon.dto.IconDTO;
import com.ylbh.common.pojo.member.dto.MemberDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * @author mgh
 */
@Mapper
@Repository
public interface GoodsClassMapper extends BaseMapper<SubGoodsClassDTO> {

    /**
     * 查询商品分类列表
     * @param page
     * @return
     */
    List<GoodsClassVO> selectGoodsClassList(IPage<GoodsClassVO> page);

    /**
     * 获取商品分类的子分类
     * @param id
     * @return
     */
    List<ShoppingGoodsClassSpecVO> queryGoodsSubClassById(Integer id);

    /**
     * 根据类型id查询规格列表
     * @param typeId
     * @return
     */
    List<SpecIficationVO> selectSpecsListByTypeId(Integer typeId);

    /**
     * 接触规格与分类的绑定关系
     * @param typeId
     * @param specId
     */
    void deleteSpecByTypeId(@Param("typeId") Integer typeId, @Param("specId") Integer specId);

    /**
     * 查询这个分类下没有选择的剩余规格
     * @param ids
     * @return
     */
    List<SpecIficationVO> querySpecsList(@Param("ids") Integer[] ids);

    /**
     * 对当前分类添加规格
     * @param typeId
     * @param specId
     */
    void insertClassSpec(@Param("typeId") Integer typeId, @Param("specId") Integer specId);

    /**
     * 添加
     * @param subGoodsClassDTO
     */
    void save(SubGoodsClassDTO subGoodsClassDTO);

    /**
     * 获取商品分类列表
     * @return
     */
    List<GoodsTypeVO> selectGoodsTypeList();

    /**
     * 商品服务列表
     * @param keywords
     * @param page
     * @return
     */
    List<GoodsServiceVO> selectGoodsService(String keywords, Page<Integer> page);

    /**
     * 商品服务详情
     * @param id
     * @return
     */
    GoodsServiceVO selectGoodsServiceInfoById(String id);

    /**
     * 修改商品服务信息
     * @param goodsService
     */
    void updateGoodsServiceDetailsById(@Param(value = "goodsService") GoodsServiceVO goodsService);

    /**
     * 删除商品服务
     * @param ids
     */
    void deleteGoodsServiceByIds(@Param(value = "ids") List<String> ids);

    /**
     * 新增商品服务
     * @param goodsService
     */
    void insertGoodsService(@Param(value = "goodsService") GoodsServiceVO goodsService);

    /**
     * 去查询原图片地址
     * @param id
     * @return
     */
    String selectPrimaryImg(Integer id);

    /**
     * 插入分类的图标
     * @param iconDTO
     */
    void insertGoodsClassSpecImg(IconDTO iconDTO);

    /**
     * 修改图片附件表中记录状态为删除
     * @param id
     */
    void deleteAccStatusBy(Integer id);

    /**
     * 添加二级分类
     * @param dto
     */
    void selectSecondLevelClass(@Param(value = "dto") SubGoodsClassDTO dto, Date date);

    Integer selectGoodsTypeId(Integer parentId);

    /**
     * 采购一级分类列表
     * @param keywords
     * @param page
     * @return
     */
    List<SubGoodsClassDTO> selectPurchaseLargeClass(String keywords, Page<Object> page);

    /**
     * 删除采购一级分类
     * @param id
     */
    void updatePurchaseLargeClassStatus(@Param(value = "id") List<Integer> id);

    /**
     * 采购二级分类列表
     * @param keywords
     * @param page
     * @return
     */
    List<SubGoodsClassDTO> queryPurchaseSecondLevelClass(String keywords, Page<Object> page);

    List<GoodsDTO> selectHNAllGoods();
}
